#!/bin/sh
#
# Copyright (C) 2000-2023 Kern Sibbald
# License: BSD 2-Clause; see file LICENSE-FOSS
#

#
# Check for zombie jobs (not terminated).
# Also scan logs for ERROR messages
#

. ./config

# check_for_zombie_jobs storage=STORAGE [client=localhost-fd]

if [ $# = 2 ] ; then
    client="$2"
else 
    client="client"
fi

${bin}/bconsole -c ${scripts}/bconsole.conf <<END_OF_DATA 2>&1 >/dev/null
@output ${tmp}/dir.out
status dir
@output ${tmp}/fd.out
status ${client}
@output ${tmp}/sd.out
status $1
@output
quit
END_OF_DATA

export zstat
grep "No Jobs running." ${tmp}/dir.out 2>&1 >/dev/null
if [ $? != 0 ] ; then
  echo " "
  echo "  !!!! Zombie Jobs in Director !!!!"
  echo "  !!!! Zombie Jobs in Director !!!!" >>test.out
  if test "$debug" = "1" ; then cat ${tmp}/dir.out; fi
  echo " "
  zstat=1
  exit 1
fi
grep "No Jobs running." ${tmp}/fd.out 2>&1 >/dev/null
if [ $? != 0 ] ; then
  echo " "
  echo "  !!!! Zombie Jobs in File daemon !!!!"
  echo "  !!!! Zombie Jobs in File daemon !!!!" >>test.out
  if test "$debug" = "1" ; then cat ${tmp}/fd.out; fi
  echo " "
  zstat=1
  exit 1
fi
grep "No Jobs running." ${tmp}/sd.out 2>&1 >/dev/null
if [ $? != 0 ] ; then
  echo " "
  echo "  !!!! Zombie Jobs in Storage daemon !!!!"
  echo "  !!!! Zombie Jobs in Storage daemon !!!!" >>test.out
  if test "$debug" = "1" ; then cat ${tmp}/sd.out; fi
  echo " "
  zstat=1
  exit 1
fi
grep " READ " ${tmp}/sd.out 2>&1 >/dev/null
if [ $? = 0 ]; then
  echo " "
  echo "  !!!! Zombie \"Read\" Jobs in Storage daemon !!!!"
  echo "  !!!! Zombie \"Read\" Jobs in Storage daemon !!!!" >>test.out
  if test "$debug" = "1" ; then cat ${tmp}/sd.out; fi
  echo " "
  zstat=1
  exit 1
fi
grep "ERROR" ${tmp}/log*.out 2>&1 >/dev/null
if [ $? = 0 ] ; then
  echo " "
  echo "  !!!! ERROR in log output !!!!"
  echo "  !!!! ERROR in log output !!!!" >>test.out
  grep "ERROR" ${tmp}/log*.out
  echo " "
  zstat=1
  exit 1
fi
grep "Fatal Error" ${tmp}/log*.out 2>&1 >/dev/null
if [ $? = 0 ] ; then
  echo " "
  echo "  !!!! Fatal Error in log output !!!!"
  echo "  !!!! Fatal Error in log output !!!!" >>test.out
  grep "Fatal Error" ${tmp}/log*.out
  echo " "
  zstat=1
  exit 1
fi

grep "glibc detected" ${tmp}/log*.out 2>&1 >/dev/null
if [ $? = 0 ] ; then
  echo " "
  echo "  !!!! glibc detected Error in log output !!!!"
  echo "  !!!! glibc detected Error in log output !!!!" >>test.out
  grep "glibc detected" ${tmp}/log*.out
  echo " "
  zstat=1
  exit 1
fi
